package cn.tedu.myIOC;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

//模拟spring实现IOC--控制反转（new）
public class MyIOC {
    //1.有哪些bean,存入list集合，查询快
     List<Bean> beans = new ArrayList<>();
     //1.1 对象初始化--要创建对象时，已经准备好很多bean
     public MyIOC() throws Exception {
         Bean b1 = new Bean("user","cn.tedu.myIOC.User");
         Bean b2 = new Bean("dept","cn.tedu.myIOC.Dept");
         Bean b3 = new Bean("order","cn.tedu.myIOC.Order");
         //1.2 把bean存入list
         Collections.addAll(beans,b1,b2,b3);
         //1.3 完成IOC的过程
         init();
     }
     
    //2.给bean们创建对象--控制反转IOC-Map<key,value>
    //key是类的名字（小写），value是这个类的对象

    //准备map，存数据
    Map<String,Object> map = new ConcurrentHashMap<>();
    public void init() throws Exception {
        //2.1 遍历list，获取每个bean
        for (Bean b : beans) {
            //2.2 获取bean身上的beanId作为key存入Map
            String key = b.getBeanId();
            //2.3 获取bean身上的beanPath进行反射创建对象，作为value存入map
            Object value = Class.forName(b.getBeanPath()).newInstance();
            map.put(key,value);
        }
         
    }
    
    //3.getBean()获取对象
    public Object getBean(String leiming){
         return map.get(leiming);
    }
}
